﻿using System;
using System.Collections.Generic;

namespace SDT.CodeSystem
{
    /// <summary>
    /// Written by SinhNT
    /// Ref: http://news.mic.gov.vn/
    /// </summary>
    public static class CityCodes
    {
        #region City codes
        /// <summary>
        /// City's codes table
        /// </summary>
        public enum Codes
        {
            CN,                                                                                                         // Cả nước
            MB, BK, BG, BN, CB, ĐB, HG, HNA, HN, HD, HP, HB, HY, LCH, LS, LCA, NĐ, NB, PT, QNI, SL, TB, TN, TQ, VP, YB, // Miền Bắc
            MT, BĐ, BTH, ĐN, HT, KH, NA, NT, PY, QB, QNA, QNG, QT, TH, TTH,                                             // Miền Trung
            MN, AG, VT, BL, BTR, BD, BP, CM, CT, ĐL, ĐNÔ, ĐNA, ĐT, GL, HGI, KG, KT, LĐ, LA, ST, TNI, TG, SG, TV, VL     // Miền Nam
        };

        /// <summary>
        /// City's codes table in string
        /// </summary>
        public static string[] StrCodes = new string[]
        {
            "CN", 
            "MB", "BK", "BG",  "BN", "CB",  "ĐB", "HG", "HNA", "HN", "HD", "HP",  "HB",  "HY", "LCH", "LS",  "LCA", "NĐ", "NB", "PT", "QNI", "SL",  "TB", "TN", "TQ", "VP", "YB", 
            "MT", "BĐ", "BTH", "ĐN", "HT",  "KH", "NA", "NT",  "PY", "QB", "QNA", "QNG", "QT", "TH",  "TTH", 
            "MN", "AG", "VT",  "BL", "BTR", "BD", "BP", "CM",  "CT", "ĐL", "ĐNÔ", "ĐNA", "ĐT", "GL",  "HGI", "KG",  "KT", "LĐ", "LA", "ST",  "TNI", "TG", "SG", "TV", "VL"
        };

        public static string[] Names = new string[]
        {
            "Cả Nước",
            "Miền Bắc", "Bắc Kạn", "Bắc Giang", "Bắc Ninh", "Cao Bằng", "Điện Biên", "Hà Giang", "Hà Nam", "Hà Nội", "Hải Dương", "Hải Phòng", "Hòa Bình", "Hưng Yên", "Lai Châu", "Lạng Sơn", "Lào Cai", "Nam Định", "Ninh Bình", "Phú Thọ", "Quảng Ninh", "Sơn La", "Thái Bình", "Thái Nguyên", "Tuyên Quang", "Vĩnh Phúc", "Yên Bái",
            "Miền Trung", "Bình Định", "Bình Thuận", "Đà Nẵng", "Hà Tĩnh", "Khánh Hòa", "Nghệ An", "Ninh Thuận", "Phú Yên", "Quảng Bình", "Quảng Nam", "Quảng Ngãi", "Quảng Trị", "Thanh Hóa", "Thừa Thiên Huế",
            "Miền Nam", "An Giang", "Bà Rịa Vũng Tàu", "Bạc Liêu", "Bến Tre", "Bình Dương", "Bình Phước", "Cà Mau", "Cần Thơ", "Đắk Lắk", "Đắk Nông", "Đồng Nai", "Đồng Tháp", "Gia Lai", "Hậu Giang", "Kiên Giang", "Kon Tum", "Lâm Đồng", "Long An", "Sóc Trăng", "Tây Ninh", "Tiền Giang", "Sài Gòn", "Trà Vinh", "Vĩnh Long"
        };

        public static string[] NorthenCities = new string[]
        {
            "BK", "BG", "BN", "CB", "ĐB", "HG", "HNA", "HN", "HD", "HP", "HB", "HY", "LCH", "LS", "LCA", "NĐ", "NB", "PT", "QNI", "SL", "TB", "TN", "TQ", "VP", "YB"
        };

        public static string[] SouthernCities = new string[]
        {
            "AG", "VT", "BL", "BTR", "BD", "BP", "CM", "CT", "ĐL", "ĐNÔ", "ĐNA", "ĐT", "GL", "HGI", "KG", "KT", "LĐ", "LA", "ST", "TNI", "TG", "SG", "TV", "VL"
        };

        public static string[] CentralCities = new string[]
        {
            "BĐ", "BTH", "ĐN", "HT", "KH", "NA", "NT", "PY", "QB", "QNA", "QNG", "QT", "TH", "TTH", 
        };
        #endregion

        private static Dictionary<string, Codes> CityMapTbl = null;

        #region City-Districts mapping table
        public static string[][][] CityDistTable = new string[][][]
        {
            new string[][]{
                new string[]{"Hà Nội"},
                new string[]{"HN"},
                new string[]{"HK","BĐ","ĐĐ","HBT","TX","TH","CG","HM","LB","ĐA","GL","SS","TTr","TL","HĐô","ST","ML","BV","PT","ĐP","HĐứ","QO","TTh","CM","TO","TTí","PX","ỨH","MĐ" },
                new string[]{"Q.Hoàn Kiếm","Q.Ba Đình","Q.Đống Đa","Q.Hai Bà Trưng","Q.Thanh Xuân","Q.Tây Hồ","Q.Cầu Giấy","Q.Hoàng Mai","Q.Long Biên","H.Đông Anh","H.Gia Lâm","H.Sóc Sơn","H.Thanh Trì","H.Từ Liêm","Q.Hà Đông","TX.Sơn Tây","H.Mê Linh","H.Ba Vì","H.Phúc Thọ","H.Đan Phượng","H.Hoài Đức","H.Quốc Oai","H.Thạch Thất","H.Chương Mỹ","H.Thanh Oai","H.Thường Tín","H.Phú Xuyên","H.Ứng Hòa","H.Mỹ Đức"}
            },
            new string[][]{
                new string[]{"Hải Phòng"},
                new string[]{"HP"},
                new string[]{"ĐS","DK","HA","HB","KA","LC","NQ","AD","AL","BLV","CH","KT","TN","TL","VB"},
                new string[]{"Q.Đồ Sơn","Q.Dương Kinh","Q.Hải An","Q.Hồng Bàng","Q.Kiến An","Q.Lê Chân","Q.Ngô Quyền","H.An Dương","H.An Lão","H.Bạch Long Vĩ","H.Cát Hải","H.Kiến Thụy","H.Thủy Nguyên","H.Tiên Lãng","H.Vĩnh Bảo"}
            },
            new string[][]{
                new string[]{"Đà Nẵng"},
                new string[]{"ĐN"},
                new string[]{"CL","HC","LC","NHS","ST","TK","HV"},
                new string[]{"Q.Cẩm Lệ","Q.Hải Châu","Q.Liên Chiểu","Q.Ngũ Hành Sơn","Q.Sơn Trà","Q.Thanh Khê","H.Hòa Vang","H.Hoàng Sa"}
            },
            new string[][]{
                new string[]{"Sài Gòn"},
                new string[]{"SG"},
                new string[]{"Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10","Q11","Q12","BTâ","BTh","GV","PN","TB","TP","TĐ","BC","CG","CC","HM","NB"},
                new string[]{"Quận 1","Quận 2","Quận 3","Quận 4","Quận 5","Quận 6","Quận 7","Quận 8","Quận 9","Quận 10","Quận 11","Quận 12","Q.Bình Tân","Q.Bình Thạnh","Q.Gò Vấp","Q.Phú Nhuận","Q.Tân Bình","Q.Tân Phú","Q.Thủ Đức","H.Bình Chánh","H.Cần Giờ","H.Củ Chi","H.Hóc Môn","H.Nhà Bè"}
            },
            new string[][]{
                new string[]{"Cần Thơ"},
                new string[]{"CT"},
                new string[]{"CĐ","PĐ","TN","VT","BT","CR","NK","ÔM"},
                new string[]{"H.Cờ Đỏ","H.Phong Điền","H.Thốt Nốt","H.Vĩnh Thạnh","Q.Bình Thủy","Q.Cái Răng","Q.Ninh Kiều","Q.Ô Môn"}
            },
            new string[][]{
                new string[]{"An Giang"},
                new string[]{"AG"},
                new string[]{"AP","CP","CT","CM","TT","PT","TC","TS","TB","LX","CĐ"},
                new string[]{"H.An Phú","H.Châu Phú","H.Châu Thành","H.Chợ Mới","H.Tri Tôn","H.Phú Tân","H.Tân Châu","H.Thoại Sơn","H.Tịnh Biên","TP.Long Xuyên","TX.Châu Đốc"}
            },
            new string[][]{
                new string[]{"Bà Rịa Vũng Tàu"},
                new string[]{"VT"},
                new string[]{"CĐứ","CĐả","ĐĐ","LĐ","TT","XM","VT","BR"},
                new string[]{"H.Châu Đức","H.Côn Đảo","H.Đất Đỏ","H.Long Điền","H.Tân Thành","H.Xuyên Mộc","TP.Vũng Tàu","TX.Bà Rịa"}
            },
            new string[][]{
                new string[]{"Bắc Giang"},
                new string[]{"BG"},
                new string[]{"HH","LG","LNa","LNg","SĐ","TY","VY","YD","YT","BG"},
                new string[]{"H.Hiệp Hòa","H.Lạng Giang","H.Lục Nam","H.Lục Ngạn","H.Sơn Động","H.Tân Yên","H.Việt Yên","H.Yên Dũng","H.Yên Thế","TP.Bắc Giang"}
            },
            new string[][]{
                new string[]{"Bắc Kạn"},
                new string[]{"BK"},
                new string[]{"BB","BT","CĐ","CM","NR","NS","PN","BK"},
                new string[]{"H.Ba Bể","H.Bạch Thông","H.Chợ Đồn","H.Chợ Mới","H.Na Rì","H.Ngân Sơn","H.Pác Nặm","TX.Bắc Kạn"}
            },
            new string[][]{
                new string[]{"Bạc Liêu"},
                new string[]{"BL"},
                new string[]{"ĐH","GR","HB","HD","PL","VL","BL"},
                new string[]{"H.Đông Hải","H.Giá Rai","H.Hòa Bình","H.Hồng Dân","H.Phước Long","H.Vĩnh Lợi","TX.Bạc Liêu"}
            },
            new string[][]{
                new string[]{"Bắc Ninh"},
                new string[]{"BN"},
                new string[]{"GB","LT","QV","TT","TD","TS","YP","BN"},
                new string[]{"H.Gia Bình","H.Lương Tài","H.Quế Võ","H.Thuận Thành","H.Tiên Du","H.Từ Sơn","H.Yên Phong","TP.Bắc Ninh"}
            },
            new string[][]{
                new string[]{"Bến Tre"},
                new string[]{"BTR"},
                new string[]{"BT","BĐ","CT","CL","GT","MC","TP","BT"},
                new string[]{"H.Ba Tri","H.Bình Đại","H.Châu Thành","H.Chợ Lách","H.Giồng Trôm","H.Mỏ Cày","H.Thạnh Phú","TX.Bến Tre"}
            },
            new string[][]{
                new string[]{"Bình Định"},
                new string[]{"BĐ"},
                new string[]{"AL","AN","HÂ","HN","PC","PM","TS","TP","VC","VT","QN"},
                new string[]{"H.An Lão","H.An Nhơn","H.Hoài Ân","H.Hoài Nhơn","H.Phù Cát","H.Phù Mỹ","H.Tây Sơn","H.Tuy Phước","H.Vân Canh","H.Vĩnh Thạnh","TP.Quy Nhơn"}
            },
            new string[][]{
                new string[]{"Bình Dương"},
                new string[]{"BD"},
                new string[]{"BC", "DT", "DA", "PG", "TU", "TA", "TDM"},
                new string[]{"H.Bến Cát","H.Dầu Tiếng","H.Dĩ An","H.Phú Giáo","H.Tân Uyên","H.Thuận An","H.Lái Thiêu","TX.Thủ Dầu Một"}
            },
            new string[][]{
                new string[]{"Bình Phước"},
                new string[]{"BP"},
                new string[]{"BL", "BĐă", "BĐố", "CT", "ĐP", "LN", "PL", "ĐX"},
                new string[]{"H.Bình Long","H.Bù Đăng","H.Bù Đốp","H.Chơn Thành","H.Đồng Phú","H.Lộc Ninh","H.Phước Long","TX.Đồng Xoài"}
            },
            new string[][]{
                new string[]{"Bình Thuận"},
                new string[]{"BTH"},
                new string[]{"BB", "PQ", "ĐL", "HT", "HTB", "HTN", "TL", "TP", "PT", "LG"},
                new string[]{"H.Bắc Bình","H.đảo Phú Quý","H.Đức Linh","H.Hàm Tân","H.Hàm Thuận Bắc","H.Hàm Thuận Nam","H.Tánh Linh","H.Tuy Phong","H.Mũi Né","TP.Phan Thiết","TX.LaGi"}
            },
            new string[][]{
                new string[]{"Cà Mau"},
                new string[]{"CM"},
                new string[]{"CN", "ĐD", "NC", "NH", "PT", "TB", "TVT", "UM", "CM", },
                new string[]{"H.Cái Nước","H.Đầm Dơi","H.Năm Căn","H.Ngọc Hiển","H.Phú Tân","H.Thới Bình","H.Trần Văn Thời","H.U Minh","TP.Cà Mau"}
            },
            new string[][]{
                new string[]{"Cao Bằng"},
                new string[]{"CB"},
                new string[]{"BL", "BL", "HL", "HQ", "HA", "NB", "PH", "QU", "TA", "TN", "TL", "TK", "CB", },
                new string[]{"H.Bảo Lạc","H.Bảo Lâm","H.Hạ Lang","H.Hà Quảng","H.Hòa An","H.Nguyên Bình","H.Phục Hòa","H.Quảng Uyên","H.Thạch An","H.Thông Nông","H.Trà Lĩnh","H.Trùng Khánh","TX.Cao Bằng"}
            },
            new string[][]{
                new string[]{"Đắk Lắk"},
                new string[]{"ĐL"},
                new string[]{"BĐ", "CK", "CMG", "EHL", "EK", "ES", "KA", "KBô", "KBu", "KNă", "KP", "Lă", "MĐ", "BMT", },
                new string[]{"H.Buôn Đôn","H.Cư Kuin","H.Cư M'gar","H.Ea H'Leo","H.Ea Kar","H.Ea Súp","H.Krông Ana","H.Krông Bông","H.Krông Buk","H.Krông Năng","H.Krông Pắc","H.Lăk","H.M'Đrăk","TP.Buôn Ma Thuột"}
            },
            new string[][]{
                new string[]{"Đắk Nông"},
                new string[]{"ĐNÔ"},
                new string[]{"CJ", "DG", "DM", "DR", "DS", "KN", "TĐ", "GN", },
                new string[]{"H.Cư Jút","H.Dăk GLong","H.Dăk Mil","H.Dăk R'Lấp","H.Dăk Song","H.Krông Nô","H.Tuy Đức","TX.Gia Nghĩa"}
            },
            new string[][]{
                new string[]{"Điện Biên"},
                new string[]{"ĐB"},
                new string[]{"ĐB", "ĐBĐ", "MẢ", "MC", "MN", "TC", "TG", "ĐBP", "ML", },
                new string[]{"H.Điện Biên","H.Điện Biên Đông","H.Mường Ảng","H.Mường Chà","H.Mường Nhé","H.Tủa Chùa","H.Tuần Giáo","TP.Điện Biên Phủ","TX.Mường Lay"}
            },
            new string[][]{
                new string[]{"Đồng Nai"},
                new string[]{"ĐNA"},
                new string[]{"CM", "ĐQ", "LT", "NT", "TP", "TN", "TB", "VC", "XL", "BH", "LK", },
                new string[]{"H.Cẩm Mỹ","H.Định Quán","H.Long Thành","H.Nhơn Trạch","H.Tân Phú","H.Thống Nhất","H.Trảng Bom","H.Vĩnh Cửu","H.Xuân Lộc","TP.Biên Hòa","TX.Long Khánh"}
            },
            new string[][]{
                new string[]{"Đồng Tháp"},
                new string[]{"ĐT"},
                new string[]{"CL", "CT", "HN", "LVu", "LVò", "TN", "TH", "TB", "TM", "CL", "SĐ", },
                new string[]{"H.Cao Lãnh","H.Châu Thành","H.Hồng Ngự","H.Lai Vung","H.Lấp Vò","H.Tam Nông","H.Tân Hồng","H.Thanh Bình","H.Tháp Mười","TP.Cao Lãnh","TX.Sa Đéc"}
            },
            new string[][]{
                new string[]{"Gia Lai"},
                new string[]{"GL"},
                new string[]{"AP", "CPă", "CS", "CPr", "ĐĐ", "ĐP", "ĐC", "IG", "IP", "Kb", "KC", "KP", "MY", "PT", "PL", "AK", },
                new string[]{"H.Ayun Pa","H.Chư Păh","H.Chư Sê","H.Chưprông","H.Đăk Đoa","H.Đăk Pơ","H.Đức Cơ","H.Ia Grai","H.Ia Pa","H.Kbang","H.Kông Chro","H.Krông Pa","H.Mang Yang","H.Phú Thiện","TP.Pleiku","TX.An Khê"}
            },
            new string[][]{
                new string[]{"Hà Giang"},
                new string[]{"HG"},
                new string[]{"BM", "BQ", "ĐV", "HSP", "MV", "QBạ", "QBì", "VX", "XM", "YM", "HG", },
                new string[]{"H.Bắc Mê","H.Bắc Quang","H.Đồng Văn","H.Hoàng Su Phì","H.Mèo Vạc","H.Quản Bạ","H.Quang Bình","H.Vị Xuyên","H.Xín Mần","H.Yên Minh","TX.Hà Giang"}
            },
            new string[][]{
                new string[]{"Hà Nam"},
                new string[]{"HNA"},
                new string[]{"BL", "DT", "KB", "LN", "TL", "PL", },
                new string[]{"H.Bình Lục","H.Duy Tiên","H.Kim Bảng","H.Lý Nhân","H.Thanh Liêm","TX.Phủ Lý"}
            },
            new string[][]{
                new string[]{"Hà Tĩnh"},
                new string[]{"HT"},
                new string[]{"CX", "CL", "ĐT", "HK", "HS", "KA", "LH", "NX", "TH", "VQ", "HT", "HL", },
                new string[]{"H.Cẩm Xuyên","H.Can Lộc","H.Đức Thọ","H.Hương Khê","H.Hương Sơn","H.Kỳ Anh","H.Lộc Hà","H.Nghi Xuân","H.Thạch Hà","H.Vũ Quang","TP.Hà Tĩnh","TX.Hồng Lĩnh"}
            },
            new string[][]{
                new string[]{"Hải Dương"},
                new string[]{"HD"},
                new string[]{"BG", "CG", "CL", "GL", "KT", "KM", "NS", "NG", "TH", "TM", "TK", "HD", },
                new string[]{"H.Bình Giang","H.Cẩm Giàng","H.Chí Linh","H.Gia Lộc","H.Kim Thành","H.Kinh Môn","H.Nam Sách","H.Ninh Giang","H.Thanh Hà","H.Thanh Miện","H.Tứ Kỳ","TP.Hải Dương"}
            },
            new string[][]{
                new string[]{"Hậu Giang"},
                new string[]{"HGI"},
                new string[]{"CT", "CTA", "LM", "PH", "VT", "NB", "VT", },
                new string[]{"H.Châu Thành","H.Châu Thành A","H.Long Mỹ","H.Phụng Hiệp","H.Vị Thủy","TX.Ngã Bảy","TX.Vị Thanh"}
            },
            new string[][]{
                new string[]{"Hòa Bình"},
                new string[]{"HB"},
                new string[]{"CP", "ĐB", "KB", "KS", "LaS", "LT", "LưS", "MC", "TL", "YT", "HB", },
                new string[]{"H.Cao Phong","H.Đà Bắc","H.Kim Bôi","H.Kỳ Sơn","H.Lạc Sơn","H.Lạc Thủy","H.Lương Sơn","H.Mai Châu","H.Tân Lạc","H.Yên Thủy","TP.Hòa Bình"}
            },
            new string[][]{
                new string[]{"Hưng Yên"},
                new string[]{"HY"},
                new string[]{"ÂT", "KC", "KĐ", "MH", "PC", "TL", "VG", "VL", "YM", "HY", },
                new string[]{"H.Ân Thi","H.Khoái Châu","H.Kim Động","H.Mỹ Hào","H.Phù Cừ","H.Tiên Lữ","H.Văn Giang","H.Văn Lâm","H.Yên Mỹ","H.Mỹ Văn","TX.Hưng Yên"}
            },
            new string[][]{
                new string[]{"Khánh Hòa"},
                new string[]{"KH"},
                new string[]{"CL", "DK", "KS", "KV", "NH", "TS", "VN", "NT", "CR", },
                new string[]{"H.Cam Lâm","H.Diên Khánh","H.Khánh Sơn","H.Khánh Vĩnh","H.Ninh Hòa","H.Trường Sa","H.Vạn Ninh","TP.Nha Trang","TX.Cam Ranh"}
            },
            new string[][]{
                new string[]{"Kiên Giang"},
                new string[]{"KG"},
                new string[]{"AB", "AM", "CT", "GR", "GQ", "HĐ", "KH", "KL", "PQ", "TH", "UMT", "VT", "RG", "HT", },
                new string[]{"H.An Biên","H.An Minh","H.Châu Thành","H.Giồng Riềng","H.Gò Quao","H.Hòn Đất","H.Kiên Hải","H.Kiên Lương","H.Phú Quốc","H.Tân Hiệp","H.U minh Thượng","H.Vĩnh Thuận","TP.Rạch Giá","TX.Hà Tiên"}
            },
            new string[][]{
                new string[]{"Kon Tum"},
                new string[]{"KT"},
                new string[]{"ĐG", "ĐH", "ĐT", "KP", "KR", "NH", "ST", "TMR", "KT", },
                new string[]{"H.Đăk Glei","H.Đăk Hà","H.Đăk Tô","H.Kon Plong","H.Kon Rộy","H.Ngọc Hồi","H.Sa Thầy","H.Tu Mơ Rông","TX.KonTum"}
            },
            new string[][]{
                new string[]{"Lai Châu"},
                new string[]{"LCH"},
                new string[]{"MT", "PT", "SH", "TĐ", "TU", "LC", },
                new string[]{"H.Mường Tè","H.Phong Thổ","H.Sìn Hồ","H.Tam Đường","H.Than Uyên","TX.Lai Châu"}
            },
            new string[][]{
                new string[]{"Lâm Đồng"},
                new string[]{"LĐ"},
                new string[]{"BL", "CT", "ĐH", "ĐT", "ĐR", "DL", "ĐD", "ĐT", "LD", "LH", "ĐL", "BL", },
                new string[]{"H.Bảo Lâm","H.Cát Tiên","H.Đạ Huoai","H.Đạ Tẻh","H.Đam Rông","H.Di Linh","H.Đơn Dương","H.Đức Trọng","H.Lạc Dương","H.Lâm Hà","TP.Đà Lạt","TX.Bảo Lộc"}
            },
            new string[][]{
                new string[]{"Lạng Sơn"},
                new string[]{"LS"},
                new string[]{"BS", "BG", "CLộ", "CLă", "ĐL", "HL", "LB", "TĐ", "VL", "VQ", "LS", },
                new string[]{"H.Bắc Sơn","H.Bình Gia","H.Cao Lộc","H.Chi Lăng","H.Đình Lập","H.Hữu Lũng","H.Lộc Bình","H.Tràng Định","H.Văn Lãng","H.Văn Quan","TP.Lạng Sơn"}
            },
            new string[][]{
                new string[]{"Lào Cai"},
                new string[]{"LCA"},
                new string[]{"BH", "BT", "BY", "BX", "MK", "SP", "VB", "XMC", "LC", },
                new string[]{"H.Bắc Hà","H.Bảo Thắng","H.Bảo Yên","H.Bát Xát","H.Mường Khương","H.Sa Pa","H.Văn Bàn","H.Xi Ma Cai","H.Cam Đường","H.Than Uyên","TP.Lào Cai"}
            },
            new string[][]{
                new string[]{"Long An"},
                new string[]{"LA"},
                new string[]{"BL", "CĐ", "CG", "CT", "ĐHò", "ĐHu", "MH", "TH", "TTh", "TTr", "TH", "TT", "VH", "TA", },
                new string[]{"H.Bến Lức","H.Cần Đước","H.Cần Giuộc","H.Châu Thành","H.Đức Hòa","H.Đức Huệ","H.Mộc Hóa","H.Tân Hưng","H.Tân Thạnh","H.Tân Trụ","H.Thạnh Hóa","H.Thủ Thừa","H.Vĩnh Hưng","H.Liên Hưng","TX.Tân An"}
            },
            new string[][]{
                new string[]{"Nam Định"},
                new string[]{"NĐ"},
                new string[]{"GT", "HH", "ML", "NT", "NH", "TN", "VB", "XT", "ÝY", "NĐ", },
                new string[]{"H.Giao Thủy","H.Hải Hậu","H.Mỹ Lộc","H.Nam Trực","H.Nghĩa Hưng","H.Trực Ninh","H.Vụ Bản","H.Xuân Trường","H.Ý Yên","TP.Nam Định"}
            },
            new string[][]{
                new string[]{"Nghệ An"},
                new string[]{"NA"},
                new string[]{"AS", "CC", "DC", "ĐL", "HN", "KS", "NaĐ", "NL", "NgĐ", "QP", "QC", "QH", "QL", "TK", "TC", "TD", "YT", "Vi", "CL", },
                new string[]{"H.Anh Sơn","H.Con Cuông","H.Diễn Châu","H.Đô Lương","H.Hưng Nguyên","H.Kỳ Sơn","H.Nam Đàn","H.Nghi Lộc","H.Nghĩa Đàn","H.Quế Phong","H.Quỳ Châu","H.Quỳ Hợp","H.Quỳnh Lưu","H.Tân Kỳ","H.Thanh Chương","H.Tương Dương","H.Yên Thành","TP.Vinh","TX.Cửa Lò"}
            },
            new string[][]{
                new string[]{"Ninh Bình"},
                new string[]{"NB"},
                new string[]{"GV", "HL", "KS", "NQ", "YK", "YM", "NB", "TĐ", },
                new string[]{"H.Gia Viễn","H.Hoa Lư","H.Kim Sơn","H.Nho Quan","H.Yên Khánh","H.Yên Mô","TP.Ninh Bình","TX.Tam Điệp"}
            },
            new string[][]{
                new string[]{"Ninh Thuận"},
                new string[]{"NT"},
                new string[]{"BÁ", "NH", "NP", "NS", "TB", "PRC", },
                new string[]{"H.Bác Ái","H.Ninh Hải","H.Ninh Phước","H.Ninh Sơn","H.Thuận Bắc","TP.Phan Rang-Tháp Chàm"}
            },
            new string[][]{
                new string[]{"Phú Thọ"},
                new string[]{"PT"},
                new string[]{"CK", "ĐH", "HH", "LT", "PN", "TN", "TâS", "TB", "ThS", "TT", "YL", "VT", "PT", },
                new string[]{"H.Cẩm Khê","H.Đoan Hùng","H.Hạ Hòa","H.Lâm Thao","H.Phù Ninh","H.Tam Nông","H.Tân Sơn","H.Thanh Ba","H.Thanh Sơn","H.Thanh Thủy","H.Yên Lập","H.Sông Thao","TP.Việt Trì","TX.Phú Thọ"}
            },
            new string[][]{
                new string[]{"Phú Yên"},
                new string[]{"PY"},
                new string[]{"ĐH", "ĐX", "PH", "SHò", "SC", "SHi", "TH", "TA", "TH", },
                new string[]{"H.Đông Hòa","H.Đồng Xuân","H.Phú Hòa","H.Sơn Hòa","H.Sông Cầu","H.Sông Hinh","H.Tây Hòa","H.Tuy An","TX.Tuy Hòa"}
            },
            new string[][]{
                new string[]{"Quảng Bình"},
                new string[]{"QB"},
                new string[]{"BT", "LT", "MH", "QN", "QT", "TH", "ĐH", },
                new string[]{"H.Bố Trạch","H.Lệ Thủy","H.Minh Hóa","H.Quảng Ninh","H.Quảng Trạch","H.Tuyên Hóa","TP.Đồng Hới"}
            },
            new string[][]{
                new string[]{"Quảng Nam"},
                new string[]{"QNA"},
                new string[]{"BTM", "ĐL", "ĐB", "ĐG", "DX", "HĐ", "NG", "NTM", "NT", "PN", "PS", "QS", "TG", "TB", "TP", "TK", "HA", },
                new string[]{"H.Bắc Trà My","H.Đại Lộc","H.Điện Bàn","H.Đông Giang","H.Duy Xuyên","H.Hiệp Đức","H.Nam Giang","H.Nam Trà My","H.Núi Thành","H.Phú Ninh","H.Phước Sơn","H.Quế Sơn","H.Tây Giang","H.Thăng Bình","H.Tiên Phước","H.Hiên","TP.Tam Kỳ","TX.Hội An"}
            },
            new string[][]{
                new string[]{"Quảng Ngãi"},
                new string[]{"QNG"},
                new string[]{"BT", "BS", "ĐP", "LS", "ML", "MĐ", "NH", "SH", "STâ", "STi", "TT", "TB", "TN", "QN", },
                new string[]{"H.Ba Tơ","H.Bình Sơn","H.Đức Phổ","H.Lý Sơn","H.Minh Long","H.Mộ Đức","H.Nghĩa Hành","H.Sơn Hà","H.Sơn Tây","H.Sơn Tịnh","H.Tây Trà","H.Trà Bồng","H.Tư Nghĩa","TP.Quảng Ngãi"}
            },
            new string[][]{
                new string[]{"Quảng Ninh"},
                new string[]{"QNI"},
                new string[]{"BC", "BL", "CT", "ĐH", "ĐT", "HH", "HB", "TY", "VĐ", "YH", "HL", "CP", "MC", "UB", },
                new string[]{"H.Ba Chẽ","H.Bình Liêu","H.Cô Tô","H.Đầm Hà","H.Đông Triều","H.Hải Hà","H.Hoành Bồ","H.Tiên Yên","H.Vân Đồn","H.Yên Hưng","H.Quảng Hà","TP.Hạ Long","TX.Cẩm Phả","TX.Móng Cái","TX.Uông Bí"}
            },
            new string[][]{
                new string[]{"Quảng Trị"},
                new string[]{"QT"},
                new string[]{"CL", "ĐR", "CC", "GL", "HL", "HH", "TP", "VL", "ĐH", "QT", },
                new string[]{"H.Cam Lộ","H.Đăk Rông","H.đảo Cồn cỏ","H.Gio Linh","H.Hải Lăng","H.Hướng Hóa","H.Triệu Phong","H.Vĩnh Linh","TX.Đông Hà","TX.Quảng Trị"}
            },
            new string[][]{
                new string[]{"Sóc Trăng"},
                new string[]{"ST"},
                new string[]{"CLD", "KS", "LP", "MT", "MX", "NN", "TT", "VC", "ST", },
                new string[]{"H.Cù Lao Dung","H.Kế Sách","H.Long Phú","H.Mỹ Tú","H.Mỹ Xuyên","H.Ngã Năm","H.Thạnh Trị","H.Vĩnh Châu","TP.Sóc Trăng"}
            },
            new string[][]{
                new string[]{"Sơn La"},
                new string[]{"SL"},
                new string[]{"BY", "MS", "MC", "ML", "PY", "QN", "SM", "SC", "TC", "YC", "SL", },
                new string[]{"H.Bắc Yên","H.Mai Sơn","H.Mộc Châu","H.Mường La","H.Phù Yên","H.Quỳnh Nhai","H.Sông Mã","H.Sốp Cộp","H.Thuận Châu","H.Yên Châu","TX.Sơn La"}
            },
            new string[][]{
                new string[]{"Tây Ninh"},
                new string[]{"TNI"},
                new string[]{"BC", "CT", "DMC", "GD", "HT", "TBi", "TC", "TBà", "TN", },
                new string[]{"H.Bến Cầu","H.Châu Thành","H.Dương Minh Châu","H.Gò Dầu","H.Hòa Thành","H.Tân Biên","H.Tân Châu","H.Trảng Bàng","TX.Tây Ninh"}
            },
            new string[][]{
                new string[]{"Thái Bình"},
                new string[]{"TB"},
                new string[]{"ĐH", "HH", "KX", "QP", "TT", "TH", "VT", "TB", },
                new string[]{"H.Đông Hưng","H.Hưng Hà","H.Kiến Xương","H.Quỳnh Phụ","H.Thái Thuỵ","H.Tiền Hải","H.Vũ Thư","TP.Thái Bình"}
            },
            new string[][]{
                new string[]{"Thái Nguyên"},
                new string[]{"TN"},
                new string[]{"ĐT", "ĐHó", "ĐHỷ", "PY", "PB", "PL", "VN", "TN", "SC", },
                new string[]{"H.Đại Từ","H.Định Hóa","H.Đồng Hỷ","H.Phổ Yên","H.Phú Bình","H.Phú Lương","H.Võ Nhai","TP.Thái Nguyên","TX.Sông Công"}
            },
            new string[][]{
                new string[]{"Thanh Hóa"},
                new string[]{"TH"},
                new string[]{"BT", "CT", "ĐS", "HT", "HL", "HH", "LC", "ML", "NS", "NL", "NT", "NX", "NC", "QH", "QS", "QX", "TT", "ThiH", "ThọX", "ThưX", "TG", "TS", "VL", "YĐ", "ThaH", "BS", "SS"},
                new string[]{"H.Bá Thước","H.Cẩm Thủy","H.Đông Sơn","H.Hà Trung","H.Hậu Lộc","H.Hoằng Hóa","H.Lang Chánh","H.Mường Lát","H.Nga Sơn","H.Ngọc Lặc","H.Như Thanh", "H.Như Xuân","H.Nông Cống","H.Quan Hóa","H.Quan Sơn","H.Quảng Xương","H.Thạch Thành","H.Thiệu Hóa","H.Thọ Xuân","H.Thường Xuân","H.Tĩnh Gia", "H.Triệu Sơn","H.Vĩnh Lộc","H.Yên Định","TP.Thanh Hóa","TX.Bỉm Sơn","TX.Sầm Sơn"}
            },
            new string[][]{
                new string[]{"Thừa Thiên Huế"},
                new string[]{"TTH"},
                new string[]{"AL", "HTh", "HTr", "NĐ", "PĐ", "PL", "PV", "QĐ", "Huế", },
                new string[]{"H.A Lưới","H.Hương Thủy","H.Hương Trà","H.Nam Đông","H.Phong Điền","H.Phú Lộc","H.Phú Vang","H.Quảng Điền","TP.Huế"}
            },
            new string[][]{
                new string[]{"Tiền Giang"},
                new string[]{"TG"},
                new string[]{"CB", "CL", "CT", "CG", "GCĐ", "GCT", "TP", "MT", "GC", },
                new string[]{"H.Cái Bè","H.Cai Lậy","H.Châu Thành","H.Chợ Gạo","H.Gò Công Đông","H.Gò Công Tây","H.Tân Phước","H.Tân Phú Đông","TP.Mỹ Tho","TX.Gò Công"}
            },
            new string[][]{
                new string[]{"Trà Vinh"},
                new string[]{"TV"},
                new string[]{"CL", "CK", "CN", "CT", "DH", "TCầ", "TCú", "TV", },
                new string[]{"H.Càng Long","H.Cầu Kè","H.Cầu Ngang","H.Châu Thành","H.Duyên Hải","H.Tiểu Cần","H.Trà Cú","TX.Trà Vinh"}
            },
            new string[][]{
                new string[]{"Tuyên Quang"},
                new string[]{"TQ"},
                new string[]{"CH", "HY", "NH", "SD", "YS", "TQ", },
                new string[]{"H.Chiêm Hóa","H.Hàm Yên","H.Na Hang","H.Sơn Dương","H.Yên Sơn","TX.Tuyên Quang"}
            },
            new string[][]{
                new string[]{"Vĩnh Long"},
                new string[]{"VL"},
                new string[]{"BM", "BT", "LH", "MT", "TB", "TÔ", "VLi", "VLo", },
                new string[]{"H.Bình Minh","H.Bình Tân","H.Long Hồ","H.Mang Thít","H.Tam Bình","H.Trà Ôn","H.Vũng Liêm","TX.Vĩnh Long"}
            },
            new string[][]{
                new string[]{"Vĩnh Phúc"},
                new string[]{"VP"},
                new string[]{"BX", "LT", "TĐ", "TD", "VT", "YL", "VY", "PY", },
                new string[]{"H.Bình Xuyên","H.Lập Thạch","H.Tam Đảo","H.Tam Dương","H.Vĩnh Tường","H.Yên Lạc","TP.Vĩnh Yên","TX.Phúc Yên"}
            },
            new string[][]{
                new string[]{"Yên Bái"},
                new string[]{"YB"},
                new string[]{"LY", "MCC", "TT", "TY", "VC", "VY", "YBì", "YBá", "NL", },
                new string[]{"H.Lục Yên","H.Mù Cang Chải","H.Trạm Tấu","H.Trấn Yên","H.Văn Chấn","H.Văn Yên","H.Yên Bình","TP.Yên Bái","TX.Nghĩa Lộ"}
            }
        };
        #endregion

        static CityCodes()
        {
            CityMapTbl = new Dictionary<string, Codes>();
            for (Codes c = Codes.CN; c <= Codes.VL; c++)
                CityMapTbl.Add(StrCodes[(int)c], c);
        }

        public static string ToString(Codes c)
        {
            return StrCodes[(int)c];
        }

        public static Codes FromString(string strCode)
        {
            if (strCode != null && CityMapTbl.ContainsKey(strCode))
                return CityMapTbl[strCode];
            return Codes.CN;
        }

        public static string[] TelephoneAreaCodes = new string[]
        {
            "", 
            "", "0281", "0240", "0241", "026", "0230", "0219", "0351", "04",   "0320", "031",  "0218", "0321", "0231", "025",  "020", "0350", "030", "0210", "033", "022", "036", "0280", "027", "0211", "029", 
            "", "056",  "062",  "0511", "039", "058",  "038",  "068",  "057",  "052",  "0510", "055",  "053",  "037",  "054", 
            "", "076",  "064",  "0781", "075", "0650", "0651", "0780", "0710", "0500", "0501", "061",  "067",  "059",  "0711", "077", "060",  "063", "072",  "079", "066", "073", "08",   "074", "070"
        };

        public static Codes FromTelephone(string phone)
        {
            if (phone == null || phone.Length < 7)
                throw new ArgumentNullException();

            if (phone.StartsWith("09") || phone.StartsWith("01"))
                return Codes.CN;

            for (int i = 0; i < TelephoneAreaCodes.Length; i++)
            {
                var c = TelephoneAreaCodes[i];
                if (c.Length > 0 && phone.StartsWith(c))
                    return (Codes)i;
            }

            return Codes.CN;
        }
    }
}